//
//  BehaviorRelayExtension.swift
//  Intersection
//
//  Created by 好东家 on 2022/8/17.
//

import RxRelay
import RxSwift

public extension BehaviorRelay {

    /// 接受当前值的更新
    /// - Parameter update: 改变闭包中的当前值
    public func acceptUpdate(byMutating update: (inout Element) -> Void) {
        var newValue = value
        // &取值 对引用的传递
        update(&newValue)
        accept(newValue)
    }

    /// 接受从当前值生成的新值
    /// - Parameter update: 生成新值并返回
    public func acceptUpdate(byNewValue update: (Element) -> Element) {
        accept(update(value))
    }
    
    /// 切换到主线程
    public var observeOnMain: Observable<Element> {
        return self.asObservable()
            .observe(on: MainScheduler.instance)
    }
    
}
